{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">读取hive导出数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ist_amount</th>\n",
       "      <th>overdue_amount</th>\n",
       "      <th>nqh_amount</th>\n",
       "      <th>o_uid</th>\n",
       "      <th>o_create_time</th>\n",
       "      <th>o_contract_amount</th>\n",
       "      <th>o_days_use</th>\n",
       "      <th>o_num</th>\n",
       "      <th>o_min_orderdate</th>\n",
       "      <th>o_max_orderdate</th>\n",
       "      <th>...</th>\n",
       "      <th>d_overdue_num_repay</th>\n",
       "      <th>d_overdue_ammount_repay</th>\n",
       "      <th>d_overdue_num_m0</th>\n",
       "      <th>d_overdue_amount_m0</th>\n",
       "      <th>d_overdue_num_m1</th>\n",
       "      <th>d_overdue_amount_m1</th>\n",
       "      <th>d_overdue_num_m2</th>\n",
       "      <th>d_overdue_amount_m2</th>\n",
       "      <th>d_overdue_num_m3</th>\n",
       "      <th>d_overdue_amount_m3</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>uid</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>00007637</th>\n",
       "      <td>7555.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12378.08</td>\n",
       "      <td>00007637</td>\n",
       "      <td>270</td>\n",
       "      <td>30000</td>\n",
       "      <td>86.0</td>\n",
       "      <td>442.0</td>\n",
       "      <td>4306.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>00008847</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>628.00</td>\n",
       "      <td>00008847</td>\n",
       "      <td>113</td>\n",
       "      <td>30000</td>\n",
       "      <td>20.0</td>\n",
       "      <td>213.0</td>\n",
       "      <td>2100.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>00012425</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>506.00</td>\n",
       "      <td>00012425</td>\n",
       "      <td>218</td>\n",
       "      <td>22000</td>\n",
       "      <td>144.0</td>\n",
       "      <td>139.0</td>\n",
       "      <td>2955.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>00015677</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>9897.02</td>\n",
       "      <td>00015677</td>\n",
       "      <td>99</td>\n",
       "      <td>20500</td>\n",
       "      <td>1.0</td>\n",
       "      <td>257.0</td>\n",
       "      <td>3414.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>00016813</th>\n",
       "      <td>13069.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>60955.62</td>\n",
       "      <td>00016813</td>\n",
       "      <td>303</td>\n",
       "      <td>12000</td>\n",
       "      <td>24.0</td>\n",
       "      <td>110.0</td>\n",
       "      <td>2504.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 83 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          ist_amount  overdue_amount  nqh_amount     o_uid  o_create_time  \\\n",
       "uid                                                                         \n",
       "00007637      7555.5             0.0    12378.08  00007637            270   \n",
       "00008847         0.0             0.0      628.00  00008847            113   \n",
       "00012425         0.0             0.0      506.00  00012425            218   \n",
       "00015677         0.0             0.0     9897.02  00015677             99   \n",
       "00016813     13069.0             0.0    60955.62  00016813            303   \n",
       "\n",
       "          o_contract_amount  o_days_use  o_num  o_min_orderdate  \\\n",
       "uid                                                               \n",
       "00007637              30000        86.0  442.0           4306.0   \n",
       "00008847              30000        20.0  213.0           2100.0   \n",
       "00012425              22000       144.0  139.0           2955.0   \n",
       "00015677              20500         1.0  257.0           3414.0   \n",
       "00016813              12000        24.0  110.0           2504.0   \n",
       "\n",
       "          o_max_orderdate         ...           d_overdue_num_repay  \\\n",
       "uid                               ...                                 \n",
       "00007637             15.0         ...                           NaN   \n",
       "00008847              2.0         ...                           NaN   \n",
       "00012425             13.0         ...                           NaN   \n",
       "00015677              6.0         ...                           NaN   \n",
       "00016813             12.0         ...                           NaN   \n",
       "\n",
       "          d_overdue_ammount_repay  d_overdue_num_m0  d_overdue_amount_m0  \\\n",
       "uid                                                                        \n",
       "00007637                      NaN               NaN                  NaN   \n",
       "00008847                      NaN               NaN                  NaN   \n",
       "00012425                      NaN               NaN                  NaN   \n",
       "00015677                      NaN               NaN                  NaN   \n",
       "00016813                      NaN               NaN                  NaN   \n",
       "\n",
       "          d_overdue_num_m1  d_overdue_amount_m1  d_overdue_num_m2  \\\n",
       "uid                                                                 \n",
       "00007637               NaN                  NaN               NaN   \n",
       "00008847               NaN                  NaN               NaN   \n",
       "00012425               NaN                  NaN               NaN   \n",
       "00015677               NaN                  NaN               NaN   \n",
       "00016813               NaN                  NaN               NaN   \n",
       "\n",
       "          d_overdue_amount_m2  d_overdue_num_m3  d_overdue_amount_m3  \n",
       "uid                                                                   \n",
       "00007637                  NaN               NaN                  NaN  \n",
       "00008847                  NaN               NaN                  NaN  \n",
       "00012425                  NaN               NaN                  NaN  \n",
       "00015677                  NaN               NaN                  NaN  \n",
       "00016813                  NaN               NaN                  NaN  \n",
       "\n",
       "[5 rows x 83 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "df = pd.read_csv(r'b:\\data.txt',sep='\\t',index_col=0,dtype={'uid': str,'o_uid':str,'i_uid':str,'d_uid':str})\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">预处理，填写0，删除联表产生的多余uid列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df = df.fillna(0)\n",
    "df = df.drop(['o_uid','i_uid','d_uid'],1)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">分割指标（订单，分期，逾期），避免指标-标记相关"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x_o = list(filter(lambda x:x.startswith('o_'),df.columns.tolist()))\n",
    "x_i = list(filter(lambda x:x.startswith('i_'),df.columns.tolist()))\n",
    "x_d = list(filter(lambda x:x.startswith('d_'),df.columns.tolist()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">定义指标0,1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df['y_i'] = df['ist_amount'] > 0\n",
    "df['y_d'] = df['overdue_amount'] > 0\n",
    "\n",
    "df = df.replace({True:1,False:0})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">定义，分割X,y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.feature_selection import SelectFromModel\n",
    "from sklearn.metrics import accuracy_score,precision_score,recall_score,confusion_matrix\n",
    "from operator import itemgetter, attrgetter\n",
    "\n",
    "from sklearn.metrics import roc_curve, auc\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "features =  x_o + x_d\n",
    "train_X, test_X, train_y, test_y = train_test_split(df[features], df['y_i'], test_size=0.25, random_state=0)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
       "            max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=4,\n",
       "            oob_score=False, random_state=None, verbose=0,\n",
       "            warm_start=False)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf = RandomForestClassifier(n_jobs=4)\n",
    "clf.fit(train_X, train_y)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">看前10位关联指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('o_min_orderdate', 0.11463929425260448)\n",
      "('o_num', 0.033385038244017763)\n",
      "('o_min_creationdate', 0.028878200494178174)\n",
      "('o_htl_num', 0.028546776656848148)\n",
      "('o_htl_max_amount', 0.028507663683980784)\n",
      "('o_avg_amount_nqh', 0.028379671923770843)\n",
      "('o_htl_avg_amount', 0.026025760278630589)\n",
      "('o_create_time', 0.026004790562254465)\n",
      "('o_htl_max_amount_nqh', 0.024803049452276422)\n",
      "('o_avg_amount', 0.024800295622218062)\n"
     ]
    }
   ],
   "source": [
    "for feature in sorted(zip(features, clf.feature_importances_),key=itemgetter(1),reverse=True)[:10]:\n",
    "    print(feature)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">可以看到前10位的相关指标都是订单的，最重要的是o_min_orderdate：用户首次消费时间到当前的天数，其余较重要的指标有o_num：用户总订单数，o_min_creationdate：拿去花第一次消费时间到当前天数等（由于随机拆分数据，每次运行的指标可能会不同）\n",
    ">看下预测的效果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "preds       0     1\n",
      "actual             \n",
      "0       57650  1540\n",
      "1        7923  2015\n",
      "0.86310901516\n",
      "0.202757093983\n"
     ]
    }
   ],
   "source": [
    "preds = clf.predict(test_X)\n",
    "print(pd.crosstab(test_y, preds, rownames=['actual'], colnames=['preds']))\n",
    "print(accuracy_score(test_y, preds))\n",
    "print(recall_score(test_y,preds))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">准确率还是挺高的，0.86，但召回率不行0.20，从混淆矩阵看，0和1的样本数量不平衡明显\n",
    ">看下AUC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xaef1080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "false_positive_rate, true_positive_rate, thresholds = roc_curve(test_y, preds)\n",
    "roc_auc = auc(false_positive_rate, true_positive_rate)\n",
    "\n",
    "plt.title('Receiver Operating Characteristic')\n",
    "plt.plot(false_positive_rate, true_positive_rate, 'b',\n",
    "label='AUC = %0.2f'% roc_auc)\n",
    "plt.legend(loc='lower right')\n",
    "plt.plot([0,1],[0,1],'r--')\n",
    "plt.xlim([-0.1,1.2])\n",
    "plt.ylim([-0.1,1.2])\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">不甚理想，来做一下正负样本平衡看下"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('o_min_orderdate', 0.13200822794653777)\n",
      "('o_htl_max_amount', 0.049098340699029373)\n",
      "('o_htl_avg_amount', 0.033321428579997335)\n",
      "('o_flt_max_amount', 0.03320099687828456)\n",
      "('o_avg_amount_nqh', 0.028649252715319245)\n",
      "('o_num', 0.026398454188174984)\n",
      "('o_avg_amount', 0.026231582513878443)\n",
      "('o_num_nqh', 0.025982496782407761)\n",
      "('o_create_time', 0.025044204725524249)\n",
      "('o_flt_avg_amount', 0.024688680340877716)\n",
      "preds      0     1\n",
      "actual            \n",
      "0       7762  2364\n",
      "1       3096  6750\n",
      "0.72661726417\n",
      "0.685557586837\n"
     ]
    },
    {
     "data": {
      "image/png": "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\naz4anm/b4SJSPTjZnQK8HcN7UJA6WHLZKCJ7A3fmW7+akp+I/gt0EJHTgzt9rgL+EmX7O4EjROQh\nEflLEH9LEXlNROrHsL86WE3kTxE5BLgihu0zsUJ+VREZhl1R5BgD3CMircR0FJEGwbr878vzwEAR\n6R5sW1tE/iYiMd2tJSL/EpFGwd8w5zOVHcSWTeF/g0+A/UTkOhGpEXxuuseyTxedJ4oKQlXTgVew\nAjLYXSULgSkisgn7hto62HYaVhR+DPvWOBFrLgBrS68OzMOagN4hehPIG0Cv4N+cWLKwE3Zn7I6n\nnGRSrxjHMxk4CSv+rsKalA4FeqrqgohNfwviXIkVjweqak5zVaHvQSEexwrDa4EpwP/lW/8EdgW1\nQUSejPVYguNZi10hPYg1K7XF7uzZVsj2i7Ck2ByYKyK/Y1dsqVhdqig3Yc2Bf2An7jeL2P5z7Hh/\nwd7rDPI2Dz2K1X/+hyWgF7D3Cqzm9B8R2Sgi56hqKlazehr72yzEagmx6o0d85/Ye95XVbeq6hbs\n7rNvgn0dHvkkVf0Du0HjVOxzsQA4rhj7dYXIuWPFuXIn6Mn7mqpGa8Ipk0SkCnZ7bj9VnRB2PM5F\n41cUziWIiJwkIvVFpAa5NYMpIYflXJHilihE5EURWSMicwpZ3y8YkmC2iHwrIp3iFYtzZUQP7K6c\ntVjzyOmqujXckJwrWtyankTkaOw+/1dUtX0B648A5qvqBhHpA9ylql54cs65MiZu/ShU9WsRaR5l\n/bcRD6cQ/VZB55xzISkrHe4uwcbwKZCIDAAGANSuXbvrIYcckqi4nHOuQpgxY8ZaVW1UkueGnihE\n5DgsUfQsbBtVHQ2MBkhOTtbU1NQEReeccxWDiPxa0ueGmihEpCN2f30fVV0XZizOOecKFtrtsSLS\nDHgPGyXyl7DicM45F13crihEJAUbobNhMPjZndiAc6jqKKwHcQPg2WDQtkxVTY5XPM4550omnnc9\nnVfE+kuBS6Nt45xzLnzeM9s551xUniicc85F5YnCOedcVJ4onHPOReWJwjnnXFSeKJxzzkXlicI5\n51xUniicc85F5YnCOedcVJ4onHPOReWJwjnnXFSeKJxzzkXlicI551xUniicc85F5YnCOedcVJ4o\nnHPOReWJwjnnXFSeKJxzzkXlicI551xUniicc85F5YnCOedcVJ4onHPOReWJwjnnXFSeKJxzzkXl\n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\nVxw0i3OzT3Y2fF+tO5/2GMHf/3s57LVXXPfnnIu/lJQUevbsSUpKCsOHD4/pOXfccQerVq1izpw5\n1KhRg9WrVzNx4sTdimPevHmMHTuWuXPnsnLlSnr16sUvv/xCUr5Jy958882dv994443Uq1cPgPbt\n25OamkrVqlVZtWoVnTp14tRTT6Vq1fjel1Qu7npS1dHAaIDk5GSN576qVIE3365CVtat4BPOOVdq\nrrsut8tRaencGR5/PPo2f/75J5MnT2bChAmceuqpMSWKLVu28Pzzz7NkyRJq1KgBwL777ss5hY7h\nE5sPP/yQvn37UqNGDVq0aEHLli2ZNm0aPXr0KHB7VeWtt97iyy+/BGCPPfbYuS4jIyNh9Z94Nj2t\nAJpGPG4SLCvuNqHwWUmdqxg+/PBDevfuzcEHH0yDBg2YMWNGkc9ZuHAhzZo1o27dukVue/311+9s\nDor8uf/++3fZdsWKFTRtmnvKa9KkCStWFH7KmzRpEvvuuy+tWrXauWzq1Km0a9eODh06MGrUqLhf\nTUB8ryimA61EpAV28u8L/DPfNh8Bg0RkLNYs9buqrsI5V+EU9c0/XlJSUrj22msB6Nu3LykpKXTt\n2rXQb+PF/Zb+2GOP7XaMhUlJSeG8887Ls6x79+7MnTuX+fPnc+GFF9KnTx9qxnnYoLglClXNFJFB\nwOdYI86LqjpXRAYG60cBnwInAwuBLcBF8YrHOVf5rF+/ni+//JLZs2cjImRlZSEiPPTQQzRo0IAN\nGzbssn3Dhg1p2bIly5YtY9OmTUVeVVx//fVMmDBhl+V9+/bl1lvz9gpo3Lgxy5fnlmXT0tJo3Lhx\nga+bmZnJe++9V+gVUJs2bdhzzz2ZM2cOycnJUWPcbaparn66du2qzrnyYd68eaHu/9///rcOGDAg\nz7Kjjz5aJ06cqBkZGdq8efOdMS5dulSbNWumGzduVFXVm2++Wfv376/btm1TVdU1a9boW2+9tVvx\nzJkzRzt27KgZGRm6ePFibdGihWZmZha47WeffaZHH310nmWLFy/WHTt27Ix3v/320/T09F2eW9D7\nDqRqCc+73rXYOVdhpaSkcMYZZ+RZduaZZ5KSkkKNGjV47bXXuOiii+jcuTNnnXUWY8aM2XmH0YgR\nI2jUqBFt27alffv2nHLKKTHVLKJp164d55xzDm3btqV3794888wzO+94uvTSS0lNTd257dixY3dp\n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\ni+r/ASigroOt07l4AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb121e80>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df1 = df[df['y_i'] == 1]\n",
    "df0 = df[df['y_i'] == 0]\n",
    "df0_s = df0.sample(len(df1))\n",
    "\n",
    "df = df1.append(df0_s)\n",
    "\n",
    "features =  x_o + x_d\n",
    "train_X, test_X, train_y, test_y = train_test_split(df[features], df['y_i'], test_size=0.25, random_state=0)\n",
    "\n",
    "clf = RandomForestClassifier(n_jobs=4)\n",
    "clf.fit(train_X, train_y)\n",
    "\n",
    "for feature in sorted(zip(features, clf.feature_importances_),key=itemgetter(1),reverse=True)[:10]:\n",
    "    print(feature)\n",
    "\n",
    "preds = clf.predict(test_X)\n",
    "\n",
    "print(pd.crosstab(test_y, preds, rownames=['actual'], colnames=['preds']))\n",
    "print(accuracy_score(test_y, preds))\n",
    "print(recall_score(test_y,preds))\n",
    "\n",
    "false_positive_rate, true_positive_rate, thresholds = roc_curve(test_y, preds)\n",
    "roc_auc = auc(false_positive_rate, true_positive_rate)\n",
    "\n",
    "plt.title('Receiver Operating Characteristic')\n",
    "plt.plot(false_positive_rate, true_positive_rate, 'b',\n",
    "label='AUC = %0.2f'% roc_auc)\n",
    "plt.legend(loc='lower right')\n",
    "plt.plot([0,1],[0,1],'r--')\n",
    "plt.xlim([-0.1,1.2])\n",
    "plt.ylim([-0.1,1.2])\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">可以看到数据比较理想了，准确率有所下降，但我们的目标主要是找出分期为1的群体，从这个角度来讲，还是比较成功的（召回率和auc都有较大改善）\n",
    ">相关指标有变化，但权重最高的还是o_min_orderdate\n",
    ">下一步考虑结合公有云数据，选取更多的特征来进行学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
